home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / gamesrc / mancala / rnd.c < prev    next >
C/C++ Source or Header  |  1994-08-24  |  793b  |  48 lines

  1. /*
  2.  * rnd.c
  3.  */
  4.  
  5.  
  6. #include <stdio.h>
  7. #include "rnd.h"
  8.  
  9. static rnd_t  *c_state = NULL;
  10. static uint   *c_s, *c_d;
  11.  
  12.  
  13. uint  rnd(void)  {
  14.     uint  result;
  15.  
  16.     result = *c_d = (*c_s + *c_d);
  17.     if (++c_d == c_state->data + RND_DATASIZE)
  18.         c_d = c_state->data;
  19.     if (++c_s == c_state->data + RND_DATASIZE)
  20.         c_s = c_state->data;
  21.     return((result >> 1) & 0x7fff);
  22. }
  23.  
  24.  
  25. void  rnd_init(rnd_t *state, int seed)  {
  26.     uint  i;
  27.  
  28.     state->indent = 0;
  29.     for (i = 0;  i < RND_DATASIZE;  ++i)  {
  30.         state->data[i] = seed;
  31.         seed = seed * 11 + 3;
  32.     }
  33. }
  34.  
  35.  
  36. void  rnd_use(rnd_t *state)  {
  37.     if (c_state != NULL)
  38.         c_state->indent = c_s - c_state->data;
  39.     c_state = state;
  40.     if (state != NULL)  {
  41.         c_s = state->data + state->indent;
  42.         c_d = c_s + RND_INDENT;
  43.         if (c_d >= c_state->data + RND_DATASIZE)
  44.             c_d -= RND_DATASIZE;
  45.     }
  46. }
  47.  
  48.